#include<stdio.h>//标准输入输出头文件（文件）
#include<string.h>

struct Student
{
    int id;
    char name[20];
};


int main()
{
    //打开一个文件
    //1.文件路径
    //绝对路径：从系统根目录开始排列的路径
    ///home/lvguanzhong/268/code/c++进阶/文件编程/File.c
    //相对路径：相当于运行程序的路径
    // ./  和运行程序在同一目录下
    //文件名：文件的名称+文件后缀名
    //2.打开文件的方式
    //w：只写：文件不存在，就创建文件，如果存在，会清空文件内容
    //r：只读:文件不存在就报错
    //a(apend)追加写：文件不存在就创建，如果存在，会在尾部继续写
    //w+，r+，a+：读写
    FILE *f= fopen("./test.txt","r");
    if(f==NULL)//打开文件失败：读的时候文件不存在  权限不够
    {
        printf("打开文件失败！\n");
        return -1;
    }
    //fgetc 从文件中读取一个字符
    //EOF:end of file 文件末尾
            // char c=0;
            // while((c= fgetc(f))!=EOF)
            // {
            //     printf("%c",c);
            // }
            // printf("\n");
   //fputc:文件写
            // char c=0;
            // while((c=getchar())!='\n')
            //         fputc(c,f);
            //     fputc('\n',f);
   //fgets:从文件中读取一个字符串
            //    char s[20]={0};
            //    fgets(s,20,f);//有换行， 读到换行结束，把换行一起读进去，读n-1个字符，最后一个('\0')
            //    printf("read: %s\n",s);   
    //fputs:往文件里写一个字符串
            // fputs("helloworld,jack",f);     

    //fwrite:把某一块内存写入文件
            // struct Student s={1,"zhangsan"};
            // fwrite(&s,sizeof(s),1,f);

    //fread:从文件里读取一块数据
    //_n:读多少次
            // struct Student s;
            // fread(&s,sizeof(s),1,f);
            // printf("id: %d name: %s\n",s.id,s.name);
    //fseek:移动光标
    //偏移量
    //移动到文件的末尾 seek_end,头 seek_set,当前 seek_current
        // fseak(f,2,SEEK_SET);
        // printf("%c\n",fgetc(f));
    

    //返回值： 当前光标位置和首位置的偏移量
    // fteel(f);

    //如何计算一个文档的大小？
        // fseak(f,0,SEEK_END);
        // printf("%ld \n",ftell(f));






     //fclose   文件关闭
    fclose(f);

    return 0;
}  